package cn.iocoder.yudao.module.system.util.gugu;

import lombok.Data;
import org.springframework.util.StringUtils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 专业名称括号处理工具类
 * 用于处理专业名称中的括号内容，支持中文括号（）和英文括号()
 *
 * @author 芋道源码
 */
public class MajorNameBracketProcessor {

    /**
     * 匹配括号及其内容的正则表达式
     * 支持中文括号（）和英文括号()
     */
    private static final Pattern BRACKET_PATTERN = Pattern.compile("[\\(（]([^\\)）]*)[\\)）]");

    /**
     * 处理专业名称，提取括号内容
     *
     * @param majorName 原始专业名称
     * @return 处理结果
     */
    public static MajorNameProcessResult processMajorName(String majorName) {
        if (!StringUtils.hasText(majorName)) {
            return new MajorNameProcessResult(majorName, null, false);
        }

        Matcher matcher = BRACKET_PATTERN.matcher(majorName);
        if (matcher.find()) {
            // 提取括号内容
            String bracketContent = matcher.group(1);
            // 移除括号及其内容，得到清洁的专业名称
            String cleanMajorName = matcher.replaceAll("").trim();
            
            return new MajorNameProcessResult(cleanMajorName, bracketContent, true);
        } else {
            return new MajorNameProcessResult(majorName, null, false);
        }
    }

    /**
     * 移除专业名称中的括号及其内容
     *
     * @param majorName 原始专业名称
     * @return 清洁的专业名称
     */
    public static String removeBrackets(String majorName) {
        if (!StringUtils.hasText(majorName)) {
            return majorName;
        }
        return BRACKET_PATTERN.matcher(majorName).replaceAll("").trim();
    }

    /**
     * 提取专业名称中的括号内容
     *
     * @param majorName 原始专业名称
     * @return 括号内容，如果没有括号则返回null
     */
    public static String extractBracketContent(String majorName) {
        if (!StringUtils.hasText(majorName)) {
            return null;
        }

        Matcher matcher = BRACKET_PATTERN.matcher(majorName);
        if (matcher.find()) {
            return matcher.group(1);
        }
        return null;
    }

    /**
     * 检查专业名称是否包含括号
     *
     * @param majorName 专业名称
     * @return 是否包含括号
     */
    public static boolean hasBrackets(String majorName) {
        if (!StringUtils.hasText(majorName)) {
            return false;
        }
        return BRACKET_PATTERN.matcher(majorName).find();
    }

    /**
     * 专业名称处理结果
     */
    @Data
    public static class MajorNameProcessResult {
        /**
         * 清洁的专业名称（移除括号后）
         */
        private String cleanMajorName;

        /**
         * 括号内容
         */
        private String bracketContent;

        /**
         * 是否包含括号内容
         */
        private boolean bracketContentExists;

        public MajorNameProcessResult(String cleanMajorName, String bracketContent, boolean bracketContentExists) {
            this.cleanMajorName = cleanMajorName;
            this.bracketContent = bracketContent;
            this.bracketContentExists = bracketContentExists;
        }

        /**
         * 是否包含括号内容（兼容性方法）
         */
        public boolean hasBracketContent() {
            return bracketContentExists;
        }
    }
}
